home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 2 / Gold Medal Software Volume 2 (Gold Medal) (1994).iso / prog / asm_0_m.arj / DEMON.ASM < prev    next >
Assembly Source File  |  1989-08-22  |  4KB  |  147 lines

  1. ; demon.asm
  2. ;
  3. ; by rick vannorman  22 august 1989
  4. ;
  5. ; genie mail r.vannorman4
  6. ;
  7. ; based on the computer recreations column by a. k. dewdney in
  8. ; scientific american august 1989
  9. ;
  10. ;
  11. ; note: this program is for vga only.  it uses mode 13h and may
  12. ; damage other video cards/monitors.  use at your own risk!
  13. ;
  14. ; assembled by turbo assembler
  15. ;
  16.          dosseg
  17.         .model  small
  18.  
  19.         .stack  100h
  20.  
  21. states  =       15
  22.  
  23.         .code
  24.  
  25. start:
  26.         call    init
  27. x001:
  28.         call    quit
  29.         call    copy
  30.         call    gobble
  31.         jmp     x001
  32.  
  33. init:
  34.         mov     ax,13h          ; set video mode for vga
  35.         int     10h
  36.  
  37.         mov     ax,cs           ; where are we?
  38.         add     ax,100h         ; use memory 4k above the program
  39.         mov     es,ax           ; for the new (extra) segment
  40.         mov     cx,0            ; count= 64kbytes
  41.  
  42.         mov     ax,0
  43.         mov     ds,ax
  44.         mov     dx,[046ch]      ; seed
  45. ini001:
  46.         mov     bx,cx
  47.         call    random
  48.         and     al,states
  49.         mov     es:[bx],al
  50.         loop    ini001
  51.  
  52.         mov     ax,0a000h       ; and the video page for data page
  53.         mov     ds,ax
  54.  
  55.         ret
  56.  
  57. random:                         ; seed contained in dx
  58.         mov     ax,dx
  59.         mov     dx,31421
  60.         imul    dx
  61.         add     ax,13
  62.         push    ax              ; save seed for later
  63.         mov     dx,states+1
  64.         imul    dx
  65.         mov     ax,dx
  66.         pop     dx
  67.         ret
  68.  
  69. quit:
  70.         mov     ah,01
  71.         int     16h
  72.         jnz     done
  73.         ret
  74. done:
  75.         mov     ax,03           ; set text mode, later use save
  76.         int     10h
  77.         mov     ah,4ch
  78.         int     21h
  79.  
  80. copy:
  81.         mov     ax,ds           ; ds, es are constant, but reversed
  82.         mov     bx,es
  83.         mov     ds,bx
  84.         mov     es,ax
  85.         mov     si,0            ; always copy the data page
  86.         mov     di,0            ; to the video ram
  87.         mov     cx,8000h        ; count= 64kbytes
  88.         rep
  89.         movsw
  90.         mov     ax,ds           ; swap back
  91.         mov     bx,es
  92.         mov     ds,bx
  93.         mov     es,ax
  94.         ret
  95.  
  96. gobble:                         ; assuming that ds points to video
  97.         mov     cx,0
  98. gob001:
  99.         mov     bx,cx           ; bx is cell pointer
  100.  
  101.         mov     al,[bx]         ; read cell
  102.         mov     ah,al           ; save cell's value
  103.         dec     al              ; and get value to gobble with
  104.         and     al,states           ; mod the number of states
  105.  
  106.         add     bx,-320         ; point to cell above
  107.         cmp     al,[bx]         ; check for gobble condition
  108.         jne     gob002
  109.         mov     es:[bx],ah      ; gobble this cell in video(new)
  110.  
  111. gob002:
  112.         add     bx,319          ; point to cell left
  113.         cmp     al,[bx]         ; check for gobble condition
  114.         jne     gob003
  115.         mov     es:[bx],ah      ; gobble this cell in video(new)
  116.  
  117. gob003:
  118.         add     bx,2            ; point to cell right
  119.         cmp     al,[bx]         ; check for gobble condition
  120.         jne     gob004
  121.         mov     es:[bx],ah      ; gobble this cell in video(new)
  122.  
  123. gob004:
  124.         add     bx,319          ; point to cell below
  125.         cmp     al,[bx]         ; check for gobble condition
  126.         jne     gob005
  127.         mov     es:[bx],ah      ; gobble this cell in video(new)
  128.  
  129. gob005:
  130.         loop    gob001
  131.  
  132.         ret
  133.  
  134.         end
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.